#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <signal.h>
#include <sys/shm.h>
#include <sys/sem.h>
void PV(int semid,int operation)
{
    struct sembuf buf;
    buf.sem_num=0;
    buf.sem_flg=SEM_UNDO;
    buf.sem_op=operation;
    semop(semid,&buf,1);
}
void main()
{
    key_t key=ftok("./",12);
    if(key<0)
    {
        perror("ftok");
    }
    int semid=semget(key,1,0666);
    semctl(semid,0,SETVAL,1);
    pid_t pid=fork();
    if(pid<0)
    {
        perror("fork");
    }
    if(pid==0)
    {
        while(1)
        {
            PV(semid,-1);
            printf("1\n");
            sleep(1);
            PV(semid,1);
        }
    }
    else
    {
        while(1)
        {
            PV(semid,-1);
            printf("2\n");
            sleep(1);
            PV(semid,1);
        }
    }
    semctl(semid,0,IPC_RMID);
}